summaryrefslogtreecommitdiff
path: root/app/[lng]/evcp/(evcp)/(eng)/document-list-ship/page.tsx
blob: 822e7cd4fafc140d4fb4be065b2e535fe50dd5f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// page.tsx (간단한 Promise 생성과 로그인 처리)
import * as React from "react"
import { type SearchParams } from "@/types/table"
import { getValidFilters } from "@/lib/data-table"
import { Skeleton } from "@/components/ui/skeleton"
import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"
import { Shell } from "@/components/shell"
import { searchParamsShipDocuCache } from "@/lib/vendor-document-list/validations"
import { getServerSession } from "next-auth"
import { authOptions } from "@/app/api/auth/[...nextauth]/route"
import Link from "next/link"
import { Button } from "@/components/ui/button"
import { LogIn } from "lucide-react"
import { getUserVendorDocumentStats, getUserVendorDocumentStatsAll, getUserVendorDocuments, getUserVendorDocumentsAll } from "@/lib/vendor-document-list/enhanced-document-service"
import { UserVendorDocumentDisplay } from "@/components/ship-vendor-document/user-vendor-document-table-container"
import { InformationButton } from "@/components/information/information-button"
import { UserVendorALLDocumentDisplay } from "@/components/ship-vendor-document-all/user-vendor-document-table-container"
interface IndexPageProps {
    searchParams: Promise<SearchParams>
}

export default async function IndexPage(props: IndexPageProps) {
    const searchParams = await props.searchParams
    const search = searchParamsShipDocuCache.parse(searchParams)
    const validFilters = getValidFilters(search.filters)

    // Get session
    const session = await getServerSession(authOptions)

    // Check if user is logged in
    if (!session || !session.user) {
        return (
            <Shell className="gap-6">
                <div className="flex items-center justify-between">
                    <div>
                        <div className="flex items-center gap-2">
                            <h2 className="text-2xl font-bold tracking-tight">
                                문서 관리
                            </h2>
                        </div>
                        {/* <p className="text-muted-foreground">
                            소속 회사의 모든 도서/도면을 확인하고 관리합니다.
                        </p> */}
                    </div>
                </div>

                <div className="flex flex-col items-center justify-center py-12 text-center">
                    <div className="rounded-lg border border-dashed p-10 shadow-sm">
                        <h3 className="mb-2 text-xl font-semibold">로그인이 필요합니다</h3>
                        <p className="mb-6 text-muted-foreground">
                            문서를 확인하려면 먼저 로그인하세요.
                        </p>
                        <Button size="lg" asChild>
                            <Link href="/partners">
                                <LogIn className="mr-2 h-4 w-4" />
                                로그인하기
                            </Link>
                        </Button>
                    </div>
                </div>
            </Shell>
        )
    }

    // User is logged in, get user ID
    const requesterId = session.user.id ? Number(session.user.id) : null

    if (!requesterId) {
        return (
            <Shell className="gap-6">
                <div className="flex items-center justify-between">
                    <div>
                        <h2 className="text-2xl font-bold tracking-tight">
                        Document Management
                        </h2>
                    </div>
                </div>
                <div className="flex flex-col items-center justify-center py-12 text-center">
                    <div className="rounded-lg border border-dashed p-10 shadow-sm">
                        <h3 className="mb-2 text-xl font-semibold">계정 오류</h3>
                        <p className="mb-6 text-muted-foreground">
                            사용자 정보가 올바르게 설정되지 않았습니다. 관리자에게 문의하세요.
                        </p>
                    </div>
                </div>
            </Shell>
        )
    }

    // 검색 파라미터 정리
    const searchInput = {
        ...search,
        filters: validFilters,
    }

    // Promise 생성 (모든 데이터를 페이지에서 처리)
    const documentsPromise = getUserVendorDocumentsAll(requesterId, searchInput)
    const statsPromise = getUserVendorDocumentStatsAll(requesterId)
    
    // Promise.all로 감싸서 전달
    const allPromises = Promise.all([documentsPromise, statsPromise])
    const statsResult = await documentsPromise


    return (
        <Shell className="gap-2">
            <div className="flex items-center justify-between space-y-2">
                <div>
                    <div className="flex items-center gap-2">
                    <h2 className="text-2xl font-bold tracking-tight">
                    조선 Document Management
                    </h2>
                    <InformationButton pagePath="evcp/document-list-ship" />
                    </div>

                    <p className="text-muted-foreground">
                  
                    </p>
                </div>
            </div>

            <React.Suspense fallback={<Skeleton className="h-7 w-52" />}>
                {/* DateRangePicker can go here */}
            </React.Suspense>

            <React.Suspense
                fallback={
                    <DataTableSkeleton
                        columnCount={8}
                        searchableColumnCount={1}
                        filterableColumnCount={3}
                        cellWidths={["10rem", "30rem", "15rem", "15rem", "15rem", "15rem", "8rem", "8rem"]}
                        shrinkZero
                    />
                }
            >
                <UserVendorALLDocumentDisplay
                    allPromises={allPromises}
                />
            </React.Suspense>
        </Shell>
    )
}